#pragma warning disable 108
using System;
using System.Runtime.InteropServices;
using System.Collections.Generic;
using Cephei;
using Cephei.Core;
using Cephei.Core.Generic;
using Microsoft.FSharp.Core;
using Cephei.QL.Termstructures;
namespace Cephei.QL.Termstructures.Inflation
{
    /// <summary> 
	/// ! This is an abstract class and contains the functions correctXXXRate which returns rates with the seasonality correction.  Currently only the price multiplicative version is implemented, but this covers stationary (1-year) and non-stationary (multi-year) seasonality depending on how many years of factors are given.  Seasonality is piecewise constant, hence it will work with un-interpolated inflation indices.  A seasonality assumption can be used to fill in inflation swap curves between maturities that are usually given in integer numbers of years, e.g. 8,9,10,15,20, etc.  Historical seasonality may be observed in reported CPI values, alternatively it may be affected by known future events, e.g. announced changes in VAT rates.  Thus seasonality may be stationary or non-stationary.  If seasonality is additive then both swap rates will show affects.  Additive seasonality is not implemented.
	/// </summary>
    [Guid ("BD0324D9-F3EB-4208-93C2-9C9F15792A0E"),ComVisible(true)]
	public interface ISeasonality 
	{
		///////////////////////////////////////////////////////////////
        // Methods
        //
        /// <summary> 
		/// 
		/// </summary>
		 Double CorrectYoYRate(DateTime d, Double r, Cephei.QL.Termstructures.IInflationTermStructure iTS);
        /// <summary> 
		/// 
		/// </summary>
		 Double CorrectZeroRate(DateTime d, Double r, Cephei.QL.Termstructures.IInflationTermStructure iTS);
        /// <summary> 
		/// 
		/// </summary>
		 Boolean IsConsistent(Cephei.QL.Termstructures.IInflationTermStructure iTS);
    }   

    /// <summary> 
	/// ! This is an abstract class and contains the functions correctXXXRate which returns rates with the seasonality correction.  Currently only the price multiplicative version is implemented, but this covers stationary (1-year) and non-stationary (multi-year) seasonality depending on how many years of factors are given.  Seasonality is piecewise constant, hence it will work with un-interpolated inflation indices.  A seasonality assumption can be used to fill in inflation swap curves between maturities that are usually given in integer numbers of years, e.g. 8,9,10,15,20, etc.  Historical seasonality may be observed in reported CPI values, alternatively it may be affected by known future events, e.g. announced changes in VAT rates.  Thus seasonality may be stationary or non-stationary.  If seasonality is additive then both swap rates will show affects.  Additive seasonality is not implemented. Factory
	/// </summary>
   	[ComVisible(true)]
    public interface ISeasonality_Factory 
    {
        ///////////////////////////////////////////////////////////////
        // Factory methods
        //
    }
}

